package com.alibaba.dingtalk.openapi.newmessage.entity;/*/*/

import com.alibaba.fastjson.annotation.JSONField;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import java.util.List;

/**
 * oa消息
 * @author 魏荣杰
 * @date 2019/3/21 16:03
 * @since v1.0
 * @version v1.0
 */
@Setter
@Getter
@ToString
public class OA extends AbstractMessage {
    private static final long serialVersionUID = 5354741351135580433L;

    /**
     * 消息点击链接地址，当发送消息为E应用时支持E应用跳转链接
     */
    @JSONField(name = "message_url")
    private String messageUrl;

    /**
     * PC端点击消息时跳转到的地址
     */
    @JSONField(name = "pc_message_url")
    private String pcMessageUrl;

    /**
     * 消息头部内容
     */
    private Head head;

    /**
     * 消息体
     */
    private Body body;

    @Setter
    @Getter
    @ToString
    public static class Head {
        /**
         * 消息头部的背景颜色。长度限制为8个英文字符，其中前2为表示透明度，后6位表示颜色值。不要添加0x
         */
        private String bgcolor;
        /**
         * 消息的头部标题 (向普通会话发送时有效，向企业会话发送时会被替换为微应用的名字)，长度限制为最多10个字符
         */
        private String text;

        public Head() {
        }

        public Head(String bgcolor, String text) {
            this.bgcolor = bgcolor;
            this.text = text;
        }
    }

    @Setter
    @Getter
    @ToString
    public static class Body {
        /**
         * 消息体的标题
         */
        private String title;
        /**
         * 消息体的表单，最多显示6个，超过会被隐藏
         */
        private List<Form> form;
        /**
         * 单行富文本信息
         */
        private Rich rich;
        /**
         * 消息体的内容，最多显示3行
         */
        private String content;
        /**
         * 消息体中的图片，支持图片资源
         */
        private String image;
        /**
         * 自定义的附件数目。此数字仅供显示，钉钉不作验证
         */
        @JSONField(name = "file_count")
        private String fileCount;
        /**
         * 自定义的作者名字
         */
        private String author;

        public Body() {
        }

        @Setter
        @Getter
        @ToString
        public static class Form {
            /**
             * 消息体的关键字
             */
            private String key;
            /**
             * 消息体的关键字对应的值
             */
            private String value;

            public Form() {
            }

            public Form(String key, String value) {
                this.key = key;
                this.value = value;
            }
        }

        @Setter
        @Getter
        @ToString
        public static class Rich {
            /**
             * 单行富文本信息的数目
             */
            private String num;
            /**
             * 单行富文本信息的单位
             */
            private String unit;

            public Rich() {
            }

            public Rich(String num, String unit) {
                this.num = num;
                this.unit = unit;
            }
        }
    }

    public OA() {
        this.head = new Head("ffff943e", "销帮帮CRM");
    }

    @Override
    public String type() {
        return "oa";
    }
}
